/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.mindbox.mueblesalpes.negocio.entity;

import java.io.Serializable;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

/**
 *
 * @author Jaimoto
 */
@Entity
@Table(name="departamento")
public class Departamento implements Serializable, Cloneable {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_DEPARTAMENTO")
    @SequenceGenerator(name = "SEQ_DEPARTAMENTO", allocationSize = 1, sequenceName = "departamento_seq")
    private Long idDepartamento;

    private String nombre;

    @OneToMany(mappedBy="departamento", fetch=FetchType.EAGER)
    private List<Ciudad>  ciudades;

    @ManyToOne(cascade=CascadeType.PERSIST)
    @JoinColumn(name="idPais")
    private Pais pais;

    public Departamento() {
    }

    

    @Override
    public Object clone() throws CloneNotSupportedException {
        Departamento d = new Departamento();
        d.setCiudades(this.getCiudades());
        d.setIdDepartamento(this.getIdDepartamento());
        d.setPais(this.getPais());
        return d;
    }

    @Override
    public boolean equals(Object obj) {
        if( obj instanceof Departamento &&  ((Departamento)obj).getNombre().equals(this.getNombre()) && ((Departamento)obj).getPais().equals(this.pais)){
            return true;
        }
        return false;
    }

    @Override
    public int hashCode() {
        if(this.getIdDepartamento() == null)
            return 0;
        return this.getIdDepartamento().hashCode();
    }

    /**
     * @return the idDepartamento
     */
    public Long getIdDepartamento() {
        return idDepartamento;
    }

    /**
     * @param idDepartamento the idDepartamento to set
     */
    public void setIdDepartamento(Long idDepartamento) {
        this.idDepartamento = idDepartamento;
    }

    /**
     * @return the nombre
     */
    public String getNombre() {
        return nombre;
    }

    /**
     * @param nombre the nombre to set
     */
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    /**
     * @return the ciudades
     */
    public List<Ciudad> getCiudades() {
        return ciudades;
    }

    /**
     * @param ciudades the ciudades to set
     */
    public void setCiudades(List<Ciudad> ciudades) {
        this.ciudades = ciudades;
    }

    /**
     * @return the pais
     */
    public Pais getPais() {
        return pais;
    }

    /**
     * @param pais the pais to set
     */
    public void setPais(Pais pais) {
        this.pais = pais;
    }
}
